<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Ubicacion_lst( $this );

	class Ubicacion_lst extends Lst
	{
	function Ubicacion_lst( &$oModule )
		{
			$this->Lst( $oModule );
			$this->aFields['cKeyLookUp'] = getParam( PARAM_KEYLOOKUP );
		}
	function setLevel()
		{
			switch ( $this->getOptionView() )
			{
				case 'E':
					$this->aShowColumns = array( 'Nombre' );
					break;
				case 'L':
				case 'T':
					$this->aShowColumns = array('Nombre' );
					break;
			}
		}
	function initialize()
		{
			$this->oFiltro = $this->oModule->loadClass( 'Ubicacion_frm' );
			$this->aFields = array_merge ( (array)$this->aFields,  (array)$this->oFiltro->getFieldArray() );
		
			$this->setTitle ( "Ubicaciones" );
			$this->setSummary( "Esta tabla contiene las Ubicaciones Geograficas" );
			$this->addColumn ( 'Pais', 'cdPais', true );
			$this->addColumn ( 'Tipo', 'cdTipoUbicacion' );
			$this->addColumn ( 'Sigla', 'cSigla' );
			$this->addColumn( 'DescriptionLookUp' );
			$this->addColumnAction ( 'Nombre', VER_UBICACION, 'ncPais,ncUbicacion', 'cdUbicacion'  );
			$this->addColumnAction ( 'Depende', VER_UBICACION, 'ncPais,ncUbicacionPadre', 'cdUbicacionPadre'  );
			$this->addColumn ( 'Prefijo', 'cPrefijoTelefono' );
			$this->addColumn ( 'Postal', 'cPostal' );
			$this->addColumn ( 'GMT', 'nGMT' );
		}
	function armarReferencia ( $ncPais, $ncUbicacion )
		{
			$cReferencia = "";
			$aReferencia = array();
			$aReferencia['cReferencia'] = "";
			$ncUbicacionLoop = $ncUbicacion;
			$nqLoop = 0;
			do {
				$cSql = "SELECT Ubi.cdUbicacion, Ubi.ncUbicacionPadre, Ubi.cPrefijoTelefono, Ubi.cPostal, cdTipoUbicacion, Ubi.nGMT, Pai.cdPais, UPa.cdUbicacion as cdUbicacionPadre
							FROM acUbicacion as Ubi
								LEFT JOIN acUbicacion as UPa
									ON UPa.ncPais = Ubi.ncPais
									AND UPa.ncUbicacion = Ubi.ncUbicacionPadre
								LEFT JOIN acPais as Pai
									ON Pai.ncPais = Ubi.ncPais
								JOIN acTipoUbicacion as TUb
									ON TUb.ncTipoUbicacion = Ubi.ncTipoUbicacion
							WHERE Ubi.ncPais = $ncPais
								AND Ubi.ncUbicacion = $ncUbicacionLoop";
				list ( $cdUbicacion, $ncUbicacionPadre, $cPrefijoTelefono, $cPostal, $cdTipoUbicacion ) =  $this->oDatabase->getArray ( $cSql ) ;
				// Guarda los Datos de la Ubicacion (prioriza de la hoja a la raiz)
				if ( $aReferencia['cdUbicacion'] == '' && $cdUbicacion != '' ) $aReferencia['cdUbicacion'] = $cdUbicacion;
				if ( $aReferencia['cPrefijoTelefono'] == '' && $cPrefijoTelefono != '' ) $aReferencia['cPrefijoTelefono'] = $cPrefijoTelefono;
				if ( $aReferencia['cPostal'] == '' && $cPostal != '' ) $aReferencia['cPostal'] = $cPostal;
				$aReferencia['cReferencia'] = "<b>". $cdTipoUbicacion . ":</b> ". $cdUbicacion . ' ' . $aReferencia['cReferencia'];
				$aReferencia['cCamino'] =  $cdUbicacion . ": " . $aReferencia['cCamino'];
				$ncUbicacionLoop = $ncUbicacionPadre;
				// Si el padre es uno mismo, se arma un loop que no termina mas !
				if ( $ncUbicacionPadre == $ncUbicacion || ++$nqLoop > 50 ) break;
			} while ( $ncUbicacionPadre );
			return $aReferencia;
		}
	function makeColumn ( $aRow, $cField )
		{
			switch( $cField )
			{
				case 'KeyTree':
					$cReturn = $aRow['ncPais'] . "," . $aRow['ncUbicacion'];
					break;
				case 'KeyLookUp':
					$aReferencia = $this->armarReferencia ( $aRow['ncPais'] , $aRow['ncUbicacion']);
					$cReturn = $aRow['ncPais'] . "|" . $aRow['ncUbicacion']. "|" . $aReferencia['cPostal']. "|" . $aReferencia['cPrefijoTelefono']. "|" . $aReferencia['cReferencia'] . "|" . $aReferencia['cdUbicacion'];
					break;
				case 'DescriptionLookUp':
					$aReferencia = $this->armarReferencia ( $aRow['ncPais'] , $aRow['ncUbicacion']);
					$cReturn = $aReferencia['cCamino'];
					break;
				break;
				default:
					return false;
				break;
			}
			return $cReturn;
		}
	function query()
		{
				if ( strpos( $this->aFields[ncUbicacion], '|') > 0   ) list ( $ncPais , $ncUbicacion ) = explode( "|", $this->aFields[ncUbicacion] );
			// Arma el Query
				$cSql = "SELECT Ubi.ncUbicacion, Ubi.cSigla, Ubi.cdUbicacion, Ubi.cPrefijoTelefono, Ubi.cPostal,Ubi.ncPais, Pai.cdPais, TUb.cdTipoUbicacion, UPa.cdUbicacion as cdUbicacionPadre
												FROM acUbicacion as Ubi
												LEFT JOIN acUbicacion as UPa
													ON UPa.ncPais = Ubi.ncPais
													AND UPa.ncUbicacion = Ubi.ncUbicacionPadre
												JOIN acPais as Pai
													ON Pai.ncPais = Ubi.ncPais
												JOIN acTipoUbicacion as TUb
													ON TUb.ncTipoUbicacion = Ubi.ncTipoUbicacion
													";
			// Arma el Filtro de la Consulta
				if ( $this->getTreeKey() )
				{
					list( $ncPais, $ncUbicacionPadre ) = explode( ",", $this->getTreeKey() );
					$this->oWhere->addExpression ( "Ubi.ncUbicacionPadre", "Ubi.ncPais = $ncPais AND Ubi.ncUbicacionPadre = $ncUbicacionPadre");
				} else
				{
					extract($this->aFields);
					$this->oWhere->addArray ( $this->oFiltro->getFilterdArray(), 'Ubi' );
					if ( !$this->getTreeKey() && $this->isTree() ) $this->oWhere->addNull( 'Ubi.ncUbicacionPadre' );
					//$this->oWhere->addExpression ( " Ubi.ncTipoUbicacion IN ( 6, 7 , 10, 11, 12 ) ", $cKeyLookUp );
					$this->oWhere->addKey ( $this->oDatabase->dbConcat( "' '", "Ubi.cdUbicacion" ), $this->aFields[cKeyLookUp] );
				}
			return $cSql . $this->oWhere->make();
		}
	function makeListActions()
		{
			$cParametroRegistro =  $this->getFieldString();
			$this->addListAction ( AGREGAR_UNA_UBICACION , $cParametroRegistro, 'I', VENTANA_SECUNDARIA );
		}
	function makeRowActions( $aRow )
		{
			$cParametroRegistro =  "ncUbicacion=" . $aRow["ncUbicacion"] . "&amp;ncPais=" . $aRow["ncPais"];
			$this->addRowAction ( AGREGAR_UNA_UBICACION , "ncUbicacionPadre=" . $aRow["ncPais"] . "|" . $aRow["ncUbicacion"] , '', VENTANA_SECUNDARIA);
			$this->addRowAction ( MODIFICAR_UNA_UBICACION, $cParametroRegistro, '', VENTANA_SECUNDARIA);
			$this->addRowAction ( ELIMINAR_UNA_UBICACION, $cParametroRegistro);
		}
	}
?>
